package com.woniuxy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @Author: 马宇航
 * @Todo: 学习ArrayList源码
 * @DateTime: 22/03/31/0031 上午 9:32
 * @Component: 成都蜗牛学苑
 **/
public class ArrayListStudy {
    public static void main(String[] args) {
        /**
         * 常见的面试题：
         *  1.ArrayList的实例化后，默认的容量是多少？  ---> 0
         *  1.1  那么这个数组第一次扩容会变成多少容量？那么第二次和第三次后是多少？
         *          10 ---> 15 ----> 22 ---> 00010110
         *  1.2  那么是怎么进行的扩容？   当前容量 + 当前容量 >> 1
         *       15  0000 1111 + 0000 0111 = 15+7
         *  2.ArrayList是什么时间发生扩容？  放满了，再放下一个的时候。
         *  3.如果在ArrayList中间插入一个数据后，底层是怎么执行的逻辑？ Arrays.copyOf 和System.arrayCopy()
         *  4.ArrayList是有序还是无序？有序，那么HashMap为什么是无序？从Hash表的角度去解释！
         *  5.里面可以放入任意数据类型，可以混着放入不同数据类型么？
         *  6.遍历删除数据的时候，会报什么错？用迭代器直接remove会报什么错？ConcurrentModificationException 并发修改异常
         *  7.ArrayList和LinkedList的区别？查询快 增删慢(扩容，和数组内部赋值)，是ArrayList！
        **/
        List<Object> objects = new ArrayList<>();
        objects.add(1);
        objects.add(2);
        objects.add(3);
        objects.add(4);
        objects.add(5);
        objects.add(6);
        objects.add(7);
        objects.add(8);
        objects.add(9);
        objects.add(10);
        Iterator<Object> iterator = objects.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            //不能使用这种方式来进行删除List集合操作！会报 并发修改异常
//            objects.remove(next);
            //采用迭代器的删除方法。
            iterator.remove();
        }
        System.out.println(objects);
    }
}
